package grapid.util;

/**
 * 分页类
 * 
 * @author grapid
 * @version 2.0
 * 
 */
public class GPage {
	/**
	 * 页码
	 */
	private Integer pageNo = 1;
	/**
	 * 每页显示数量
	 */
	private Integer pageSize = 10;
	/**
	 * 总页数
	 */
	private Integer pageMax = 1;
	/**
	 * 记录总数
	 */
	private Integer total = 0;
	/**
	 * 翻页条码显示数
	 */
	private Integer num = 10;
	/**
	 * 分页起始页
	 */
	private Integer start = 1;
	/**
	 * 分页结束页
	 */
	private Integer end = 1;
	/**
	 * 前一页页码
	 */
	private Integer pre = 1;
	/**
	 * 后一页页码
	 */
	private Integer next = 1;
	/**
	 * 数据
	 */
	private Object data;

	public GPage() {
	}

	/**
	 * 构造函数
	 * 
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            每页显示数量
	 * @param num
	 *            翻页条码显示数
	 * @param total
	 *            记录总数
	 * @param data
	 *            数据
	 */
	public GPage(Integer pageNo, Integer pageSize, Integer num, Integer total, Object data) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.total = total;
		this.num = num;
		this.data = data;
		this.reckon();
	}

	/**
	 * 初始化
	 * 
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            每页显示数量
	 * @param num
	 *            翻页条码显示数
	 * @param total
	 *            记录总数
	 * @param data
	 *            数据
	 */
	public void init(Integer pageNo, Integer pageSize, Integer num, Integer total, Object data) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.total = total;
		this.num = num;
		this.data = data;
		this.reckon();
	}

	// 计算翻页数据
	private void reckon() {
		int middle = this.num / 2;
		this.pageMax = this.total / this.pageSize;
		if (this.total % this.pageSize > 0)
			this.pageMax++;
		if (this.pageMax < 1)
			this.pageMax = 1;
		if (this.pageNo > this.pageMax)
			this.pageNo = this.pageMax;
		this.start = this.pageNo - middle;
		if (this.start < 1)
			this.start = 1;
		this.end = this.start + this.num - 1;
		if (this.end > this.pageMax)
			this.end = this.pageMax;
		if (this.start + this.num > this.end + 1)
			this.start = this.end - this.num + 1;
		if (this.start < 1)
			this.start = 1;
		this.pre = this.pageNo - 1;
		if (this.pre < 1)
			this.pre = 1;
		this.next = this.pageNo + 1;
		if (this.next > this.pageMax)
			this.next = this.pageMax;
	}

	/**
	 * 序列化
	 */
	public String toString() {
		return "Page[pageNo=" + this.pageNo + ",pageSize=" + this.pageSize + ",pageMax=" + this.pageMax + ",total="
				+ this.total + ",num=" + this.num + ",start=" + this.start + ",pre=" + this.pre + ",next=" + this.next
				+ ",end=" + this.end + "]";
	}

	/**
	 * 获取页码
	 * 
	 * @return 返回页码
	 */
	public Integer getPageNo() {
		return pageNo;
	}

	/**
	 * 设置页码
	 * 
	 * @param pageNo
	 *            前页码
	 */
	public void setPageNo(Integer pageNo) {
		this.pageNo = pageNo;
	}

	/**
	 * 获取每页显示数量
	 * 
	 * @return 返回每页显示数量
	 */
	public Integer getPageSize() {
		return pageSize;
	}

	/**
	 * 设置每页显示数量
	 * 
	 * @param pageSize
	 *            每页显示数量
	 */
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

	/**
	 * 获取总页数
	 * 
	 * @return 返回总页数
	 */
	public Integer getPageMax() {
		return pageMax;
	}

	/**
	 * 设置总页数
	 * 
	 * @param pageMax
	 *            总页数
	 */
	public void setPageMax(Integer pageMax) {
		this.pageMax = pageMax;
	}

	/**
	 * 获取记录总数
	 * 
	 * @return 返回记录总数
	 */
	public Integer getTotal() {
		return total;
	}

	/**
	 * 设置记录总数
	 * 
	 * @param total
	 *            记录总数
	 */
	public void setTotal(Integer total) {
		this.total = total;
	}

	/**
	 * 获取翻页条码显示数
	 * 
	 * @return 返回翻页条码显示数
	 */
	public Integer getNum() {
		return num;
	}

	/**
	 * 设置翻页条码显示数
	 * 
	 * @param num
	 *            翻页条码显示数
	 */
	public void setNum(Integer num) {
		this.num = num;
	}

	/**
	 * 获取分页起始页
	 * 
	 * @return 返回分页起始页
	 */
	public Integer getStart() {
		return start;
	}

	/**
	 * 设置分页起始页
	 * 
	 * @param start
	 *            分页起始页
	 */
	public void setStart(Integer start) {
		this.start = start;
	}

	/**
	 * 获取分页结束页
	 * 
	 * @return 返回分页结束页
	 */
	public Integer getEnd() {
		return end;
	}

	/**
	 * 设置分页结束页
	 * 
	 * @param end
	 *            分页结束页
	 */
	public void setEnd(Integer end) {
		this.end = end;
	}

	/**
	 * 获取前一页页码
	 * 
	 * @return 返回前一页页码
	 */
	public Integer getPre() {
		return pre;
	}

	/**
	 * 设置前一页页码
	 * 
	 * @param pre
	 *            前一页页码
	 */
	public void setPre(Integer pre) {
		this.pre = pre;
	}

	/**
	 * 获取后一页页码
	 * 
	 * @return 返回后一页页码
	 */
	public Integer getNext() {
		return next;
	}

	/**
	 * 设置后一页页码
	 * 
	 * @param next
	 *            后一页页码
	 */
	public void setNext(Integer next) {
		this.next = next;
	}

	/**
	 * 获取数据
	 * 
	 * @return 返回数据
	 */
	public Object getData() {
		return data;
	}

	/**
	 * 设置数据
	 * 
	 * @param data
	 *            数据
	 */
	public void setData(Object data) {
		this.data = data;
	}

}
